
\section{Instalación del Sistema Operativo}
\subsection{Layuot de MINIX y system\_calls}

\noindent
\textbf{Indique gráficamente el layout del sistema operativo MINIX, indicando sus componentes y las funciones que brindan. En especial indique los system\_calls que contienen}

MINIX es un sistema operativo basado en micro-kernels. MINIX es una colección de procesos que se comunican entre sí y con los procesos de usuario empleando una sola primitiva de comunicación entre procesos: la transferencia de mensajes.

El kernel se encarga de diversas tareas:
\begin{itemize}
    \item Atender las interrupciones.
    \item Manejar el pasaje de mensajes
    \item Administrar el bajo nivel de los procesos.
    \item Administrar la entrada/salida.
\end{itemize}

El \textsl{memory managemen}t y el \textsl{file system} son procesos separados que corren por fuera del kernel. Los drivers de entrada/salida también son diferentes procesos, aunque estén en el kernel. 

MINIX está estructurado en cuatro capas, cada una de las cuales realiza una función bien definida:

	\begin{figure}[p!hbt]
		\centering
		\includegraphics[width=0.75\textwidth]{img/capasminix.png}
		\caption{Capas Minix 2 }
		\label{fig:capas}
	\end{figure}


	\textsc{Capa uno:} Interrupciones (software, -externas, internas-, hardware), planificación, gestión de mensajes y cambio de contexto. Este código es ejecutado en modo supervisor de la CPU.


	\textsc{Capa dos:} Tareas o manejadores de E/S (I/O tasks o drivers). Se les llama tareas a todos aquellos procesos que realizan funciones básicas de gestión del SO. Un caso especial es la tarea del sistema, que sirve para cuestiones que los procesos no son capaces de realizar, como por ejemplo el copiado entre zonas de memoria de diferente nivel de protección. Las tareas se encuentran en ranuras especiales del BCP, lo que les hace tener más prioridad que los procesos, sin embargo, el CPU las ejecuta en modo usuario.

	\textsc{Capa tres:} Tareas de gestión de memoria, archivos y red (procesos servidores). Esta capa es el punto de entrada al sistema, la interfaz con los procesos de usuario, (interpretación de los system calls). Debido al algoritmo de planificación usado en MINIX, estos procesos se ejecutan con mayor prioridad que los de capa cuatro (procesos de usuario).

	\textsc{Capa cuatro:} Tarea Init (el padre del resto de los procesos de usuario), y procesos de usuario. 

Se cuenta con tres primitivas para \textbf{enviar y recibir mensajes}, las cuales se invocan con los procedimientos de biblioteca de C:

\begin{itemize}
	\item send(destino, \&mensaje); para enviar un mensaje al proceso destino,
	\item receive(origen, \&mensaje); para recibir un mensaje del proceso origen (o ANY) y
	\item send\_rec(org\_dest, \&mensaje); para enviar un mensaje y esperar una respuesta del mismo proceso.
\end{itemize}

Cada proceso o tarea puede enviar y recibir mensajes de procesos y tareas de su propia capa, y de aquellos en la capa que está directamente abajo. Los procesos de usuario no pueden comunicarse directamente con las tareas de E/S. El sistema obliga a cumplir esta restricción.

En la Fig \ref{fig:sysCall} se muestran las 53 llamadas a sistemas que posee MINIX.

	\begin{figure}[p!hbt]
		\centering
        	\includegraphics[width=0.75\textwidth]{img/systemsCalls.png}
		\caption{System\_calls de MINIX}
		\label{fig:sysCall}
	\end{figure}

El código de retorno $s$ es -1 si ocurre un error, $fd$ es un descriptor de archivo, y $n$ es una cantidad de bytes. El resto de los códigos de retorno son lo que el nombre sugiere.

\subsection{Instalación}

\noindent

\textbf{Instalar MINIX en su versión para DOS (DOSMINIX), WINDOWS o LINUX (BOCHS según se describe en http://www.dc.uba.ar/people/materias/so/html/minix.html}

Usamos el emulador VMware, seteamos el disco rígido y la memoria según lo pautado por la cátedra. El emulador permite como mínimo crear discos de 0.1Gb (102 Mb según el propio VMWare)

Tuvimos problemas al bootear desde la imagen de diskete (ROOT) que se encuentra en la página web . La cual al poner como primera instrucción \textbf{/dev/fd0c} daba el error que puede verse en la Fig: \ref{fig:e1}, luego pensamos que podía tratarse de un problema con la denominación del floppy y tratamos el con \textbf{/dev/fd0}
El problema resultó ser que la imagen no era la correcta, la correcta estaba en linuxkit, puede verse el correcto booteo en la Fig: \ref{fig:he}.

	\begin{figure}[p!hbt]
		\centering
		\includegraphics[width=0.75\textwidth]{img/error1.png}
		\caption{Error 1 durante la instalación}
		\label{fig:e1}
	\end{figure}
			
	\begin{figure}[p!hbt]
			\centering
			\includegraphics[width=0.75\textwidth]{img/error2.png}
			\caption{Error 2 durante la instalación}
			\label{fig:e2}
	\end{figure}
	
	\begin{figure}[p!hbt]
		\centering
	 	\includegraphics[width=0.75\textwidth]{img/he.png}
		\caption{Sistema booteando correctamente}
		\label{fig:he}
	\end{figure}

\newpage
 
